package com.GGG.cloud.house.agent.service;

import java.util.Collection;
import java.util.List;

/**
 * TODO
 *
 * @author 老九学堂
 * @copyright 老九学堂
 */
public interface BaseService<T, ID> {

    /**
     * 添加数据
     *
     * @param record 需要添加的数据
     * @return
     */
    boolean save(T record);

    /**
     * 添加一条数据,为空的属性会使用默认值
     *
     * @param record 需要添加的数据
     * @return
     */
    boolean saveWithNull(T record);

    /**
     * 添加数据
     *
     * @param records 需要添加的数据
     * @return
     */
    boolean save(Collection<T> records);

    /**
     * 添加数据
     *
     * @param records
     * @return
     */
    boolean saveWithNull(Collection<T> records);

    /**
     * 根据唯一的编号删除数据
     *
     * @param id 数据唯一的编号
     * @return
     */
    boolean remove(ID id);

    /**
     * 根据编号批量删除数据
     *
     * @param ids
     * @return
     */
    boolean remove(ID[] ids);

    /**
     * 修改一条数据的信息
     *
     * @param record
     * @return
     */
    boolean update(T record);

    /**
     * 修改一条数据，包括值为空的属性
     *
     * @param record
     * @return
     */
    boolean updateWithNull(T record);

    /**
     * 获取数据指定编号的一条数据
     *
     * @param id 需要获取数据的编号
     * @return
     */
    T get(ID id);

    /**
     * 获取满足条件的一个数据，有多个数据会抛出异常
     *
     * @param condition
     * @return
     */
    T getByCondition(T condition);

    /**
     * 获取全部数据的集合
     *
     * @return
     */
    List<T> listAll();

    /**
     * 获取满足条件的数据集合
     *
     * @param condition 筛选的条件
     * @return
     */
    List<T> listByCondition(T condition);

    /**
     * 获取满足条件的分页数据集合
     *
     * @param pageIndex 当前显示的页码
     * @param pageSize  每页显示的数据条数
     * @param condition 筛选的条件
     * @return
     */
    List<T> listByPageAndCondition(int pageIndex, int pageSize, T condition);
}
